/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;


import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.cip.esymons.general.be.Departamento;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.Distrito;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.be.Provincia;
import org.cip.esymons.general.be.Rubro;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.general.be.TipoZona;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.tesoreria.bc.DireccionPersonaDelegateTesoreria;
import org.cip.esymons.tesoreria.bc.PersonaJuridicaDelegate;
import org.cip.esymons.tesoreria.bc.SolicitanteBusquedaDelegate;
import org.cip.esymons.tesoreria.be.EnumEstadoSolicitante;

/**    

 *
 * @author Ingrid Capuñay
 */
public class PersonaJuridicaController {

    private PersonaJuridicaDelegate delegado;
    private SolicitanteBusquedaDelegate delegadoSolicitanteBusqueda;
    private PersonaJuridicaDelegate delegadoPersonaJuridica;
    private PersonaJuridica personaJuridica;
    private Rubro rubroSeleccionado;
    private Rubro rubro = null;
    private String razSoc = null;


    /*codigo agregado para direcciones*/
    private Departamento departamento;
    private Provincia provincia;
    private Distrito distrito;
    private TipoZona tipoZona;
    private String nombreZona;
    private String direccion;
    private DireccionPersona direccionPersona;
    private DireccionPersonaDelegateTesoreria delegadoDireccionPersona;

    //para editar   
    private DireccionPersona dirEmpresa;
    /*fin de codigo*/

    public PersonaJuridicaController() {
        delegado = new PersonaJuridicaDelegate();
        delegadoSolicitanteBusqueda = new SolicitanteBusquedaDelegate();
        delegadoPersonaJuridica = new PersonaJuridicaDelegate();
        delegadoDireccionPersona=new DireccionPersonaDelegateTesoreria();
    }

    public PersonaJuridica buscarBancoPorCodigo(Long cod) {
        try {
            return delegado.find(cod);
        } catch (Exception ex) {
            return null;
        }

    }
    public SelectItem[] getBancoItems() {
        try {
            List<PersonaJuridica> lba = new ArrayList<PersonaJuridica>();
            lba = delegado.listarTodosBancos();
            SelectItem[] select = new SelectItem[lba.size()];
            int i = 0;
            for (PersonaJuridica ba : lba) {
                SelectItem item = new SelectItem(ba, ba.getEmprazonSocial());
                select[i++] = item;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Bancos");
            select[0] = item;
            return select;
        }
    }
    public SelectItem[] getEstadoEmpresasItems() {
        try {
            SelectItem[] select = new SelectItem[EnumEstadoSolicitante.values().length];
            int cont = 0;
            for (EnumEstadoSolicitante e : EnumEstadoSolicitante.values()) {
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Estados");
            return select;
        }
    }

    public List<PersonaJuridica> autocompletarPersonasJuridicas(Object event) {
        List<PersonaJuridica> lista = new ArrayList();
        String cond = event.toString().toUpperCase();
        try {
            lista = delegadoPersonaJuridica.listaPJuridicasXCond(cond);
        } catch (Exception ex) {
            ControladorAbstracto.error("Error al obtener Personas Juridicas:" + ex.getMessage());
        } finally {
            return lista;
        }
    }

    /**
     * @return the personaJuridica
     */
    public PersonaJuridica getPersonaJuridica() {
        return personaJuridica;
    }

    /**
     * @param personaJuridica the personaJuridica to set
     */
    public void setPersonaJuridica(PersonaJuridica personaJuridica) {
        this.personaJuridica = personaJuridica;
    }

    /**
     * @return the rubroSeleccionado
     */
    public Rubro getRubroSeleccionado() {
        return rubroSeleccionado;
    }

    /**
     * @param rubroSeleccionado the rubroSeleccionado to set
     */
    public void setRubroSeleccionado(Rubro rubroSeleccionado) {
        this.rubroSeleccionado = rubroSeleccionado;
    }

    public List<PersonaJuridica> getListaPersonaJuridica() {
        return delegadoSolicitanteBusqueda.buscarPerJuridica(null, razSoc, rubro);
    }

    public String buscar() {
        return null;
    }

    public String nuevo() {
        personaJuridica = new PersonaJuridica();
        direccionPersona=new DireccionPersona();
        rubroSeleccionado = null;
        return "nuevo";
    }

    public String editar() {
        if(personaJuridica.getListaDirecciones().get(0)!=null){
            if(personaJuridica.getListaDirecciones().get(0).getDisCodigo()!=null){
                distrito=personaJuridica.getListaDirecciones().get(0).getDisCodigo();
                provincia=personaJuridica.getListaDirecciones().get(0).getDisCodigo().getProCodigo();
                departamento=personaJuridica.getListaDirecciones().get(0).getDisCodigo().getProCodigo().getDepCodigo();
            }            
            if(personaJuridica.getListaDirecciones().get(0).getZonaCodigo()!=null){
                tipoZona=personaJuridica.getListaDirecciones().get(0).getZonaCodigo();
            }        
            nombreZona=personaJuridica.getListaDirecciones().get(0).getDpenombreZona();
            direccion=personaJuridica.getListaDirecciones().get(0).getDpeDireccion();

            dirEmpresa=new DireccionPersona();
        }
        
        return "editar";
    }

    public String grabar() {
        personaJuridica.setSolEstado(EnumEstadoSolicitante.Activa);
        delegado.create(personaJuridica);
        direccionPersona.setSolCodigo((Solicitante)personaJuridica);
        direccionPersona.setDisCodigo(distrito);
        direccionPersona.setZonaCodigo(tipoZona);
        direccionPersona.setDpenombreZona(nombreZona);
        direccionPersona.setDpeDireccion(direccion);
        direccionPersona.setDpeActivo(true);
        delegadoDireccionPersona.create(direccionPersona);
        ControladorAbstracto.info("Se insertó Satisfactoriamente la Empresa");
        return "buscar";

    }

    public String nuevoGeneral() {
        personaJuridica = new PersonaJuridica();
        return null;
    }

    public String grabarGeneral() {
        
            personaJuridica.setSolEstado(EnumEstadoSolicitante.Activa);
            if(personaJuridica.getRubCodigo().getRubCodigo().equals(0)){
                personaJuridica.setRubCodigo(null);
            }
            delegado.create(personaJuridica);
            if (distrito!=null || tipoZona!=null || nombreZona!=null || direccion!=null){
                direccionPersona=new DireccionPersona();
                direccionPersona.setSolCodigo((Solicitante)personaJuridica);
                direccionPersona.setDisCodigo(distrito);
                direccionPersona.setZonaCodigo(tipoZona);
                direccionPersona.setDpenombreZona(nombreZona);
                direccionPersona.setDpeDireccion(direccion);
                direccionPersona.setDpeActivo(true);
                delegadoDireccionPersona.create(direccionPersona);
            }
            ControladorAbstracto.info("Se creó con éxito la Persona Jurídica");                
            return null;

    }

    //Modificado x Ingrid
    public String actualizar() {
        delegado.edit(personaJuridica);
        dirEmpresa=delegadoDireccionPersona.buscaDireccionColegiado(personaJuridica.getSolCodigo());//metodo q busca tambien direcciones para empresas
        dirEmpresa.setDisCodigo(distrito);
        dirEmpresa.setZonaCodigo(tipoZona);
        dirEmpresa.setDpenombreZona(nombreZona);
        dirEmpresa.setDpeDireccion(direccion);
        delegadoDireccionPersona.edit(dirEmpresa);
        ControladorAbstracto.info("Se actualizó Satisfactoriamente la Empresa");
        return "buscar";
    }

    public String anular() {
        personaJuridica.setSolEstado(EnumEstadoSolicitante.Anulada);
        delegado.edit(personaJuridica);
        return null;
    }

    /**
     * @return the rubro
     */
    public Rubro getRubro() {
        return rubro;
    }

    /**
     * @param rubro the rubro to set
     */
    public void setRubro(Rubro rubro) {
        this.rubro = rubro;
    }

    /**
     * @return the razSoc
     */
    public String getRazSoc() {
        return razSoc;
    }

    /**
     * @param razSoc the razSoc to set
     */
    public void setRazSoc(String razSoc) {
        this.razSoc = razSoc;
    }

    /**
     * @return the departamento
     */
    public Departamento getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    /**
     * @return the provincia
     */
    public Provincia getProvincia() {
        return provincia;
    }

    /**
     * @param provincia the provincia to set
     */
    public void setProvincia(Provincia provincia) {
        this.provincia = provincia;
    }

    /**
     * @return the distrito
     */
    public Distrito getDistrito() {
        return distrito;
    }

    /**
     * @param distrito the distrito to set
     */
    public void setDistrito(Distrito distrito) {
        this.distrito = distrito;
    }

    /**
     * @return the tipoZona
     */
    public TipoZona getTipoZona() {
        return tipoZona;
    }

    /**
     * @param tipoZona the tipoZona to set
     */
    public void setTipoZona(TipoZona tipoZona) {
        this.tipoZona = tipoZona;
    }

    /**
     * @return the nombreZona
     */
    public String getNombreZona() {
        return nombreZona;
    }

    /**
     * @param nombreZona the nombreZona to set
     */
    public void setNombreZona(String nombreZona) {
        this.nombreZona = nombreZona;
    }

    /**
     * @return the direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * @param direccion the direccion to set
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

   
}
